#add_library(
#             native-lib
#             SHARED
#             native-lib.cpp )
#
#find_library(
#              log-lib
#              log )
#
#target_link_libraries(
#                       native-lib
#                       ${log-lib} )


# For more information about using CMake with Android Studio, read the
# documentation: https://d.android.com/studio/projects/add-native-code.html

# Sets the minimum version of CMake required to build the native library.


#二2.3.2-01：最低支持版本（可选）
cmake_minimum_required(VERSION 3.4.1)
#SET(CMAKE_BUILD_TYPE DEBUG)

#二2.3.1-01：单号注释

#[[
二2.3.1-02：
多行注释
]]

#二2.3.1-03：变量
set(var 123)
message("打印变量= ${var}")

#二2.3.1-04：列表
set(list_var 1 2 3 4 5 6)
MESSAGE("打印List= ${list_var}")

#二2.3.1-05：流程控制-循环(while)命令
set(a "")
while(NOT a STREQUAL "xxx")
set(a "${a}x")# 追加x
    message("while的a的值= ${a}")
endwhile()

#二2.3.1-06：流程控制-循环(foreach)命令1
foreach(item 1 2 3)
    message("item的值= ${item}")
endforeach(item)

#二2.3.1-07：流程控制-循环(foreach)命令2
foreach(item2 RANGE 3)
    message("RANGE的值= ${item2}")
endforeach(item2)

#二2.3.1-08：流程控制-循环(foreach)命令3
foreach(item3 RANGE 0 7 3)
    message("RANGE步进3的值= ${item3}")
endforeach(item3)

#二2.3.1-09：流程控制-循环(列表)命令4
set(list_var 1 2 3)
foreach(item4 IN LISTS list_var)
    message("列表item的值= ${item4}")
endforeach(item4)

#二2.3.1-10~13：自定义函数命令
function(fun a b c)
    message("自定义函数a= ${a}")
    message("自定义函数b= ${b}")
    message("自定义函数c= ${c}")

    message("传入参数个数= ${ARGC}")

    message("传入参数列表= ${ARGV}")

    message("传入第0个参数= ${ARGV0}")
    message("传入第1个参数= ${ARGV1}")
    message("传入第2个参数= ${ARGV2}")
    message("传入第3个参数= ${ARGV3}")
endfunction(fun)
#调用函数
fun(3 2 1)

#二2.3.1-14：自定义宏命令
macro(ma x y)
    message("宏x= ${x}")
    message("宏y= ${y}")
endmacro(ma)
#调用宏
ma("你好" "world")

message("\n")
#二2.3.1-14：作用域
message("作用域有：全局层、目录层、函数层")
message("名称相同时，函数层会覆盖目录层，目录层会覆盖全局层。")





set(SOURCES)
file(GLOB_RECURSE SOURCES ${CMAKE_SOURCE_DIR}/*.cpp ${CMAKE_SOURCE_DIR}/*.c)

#二2.3.2-02：查找指定目录所有源文件（不含子目录）并把名称保存在DIR_SRCS
#aux_source_directory(. DIR_SRCS)
#message("所有源文件= ${DIR_SRCS}")

#二2.3.2-03：添加一个库或导入预编译库
#[[
一个库：add_library(<name> [STATIC | SHARED | MODULE] [EXCLUDE_FROM_ALL] source1...sourceN)；
<name>：库名；
[STATIC | SHARED | MODULE]：库类型（STATIC：静态库、SHARED：动态库、MODULE：duld系统有效性）；
[EXCLUDE_FROM_ALL]：是否被默认构建；
source1...sourceN：库源文件。

预编译库：add_library(<name> [STATIC | SHARED | MODULE | UNKOWN] IMPORTED)；
例：add_library(test SHAREDIMPORTED)；
    set_target_properties(
        test #库名
        PROPERTIES IMPORTED_LOCATION #设置参数
        库路径/${ANDROID_ABI}/libtest.so #导入库路径
    )。



#二2.3.2-0：设置可执行文件的输出路径（EXCUTABLE_OUTPUT_PATH是全局变量）
#set(EXCUTABLE_OUTPUT_PATH [output_path])

#二2.3.2-0：设置库文件的输出路径（LIBRARY_OUTPUT_PATH是全局变量）
#set(LIBRARY_OUTPUT_PATH [output_path])

#二2.3.2-0：设置C++编译参数（CMAK_CXX_FLAGS是全局变量）
#set(CMAK_CXX_FLAGS “-Wall std=c++11”)

#二2.3.2-0：设置源文件集合（SOURCE_FILES是自定义变量）
#set(SOURCE_FILES main.cpp test.cpp...)

#二2.3.2-0：设置头文件目录（可以用相对或绝对路径，也可以用自定义的变量值）
#include_directories(./include ${MY_INCLUDE})

#二2.3.2-0：设置头文件目录（可以用相对或绝对路径，也可以用自定义的变量值）
#include_directories(./include ${MY_INCLUDE})
]]


#
#[[
二2.3.2-0：
添加一个库/将若干个库链接到目标库文件（顺序遵循依赖）：
target_link_libraries(；
add_library(；
add_executable(。
]]
add_library(
        native-lib
        SHARED
        #native-lib.cpp
        ${SOURCES})

set(LIBS)
list(APPEND LIBS log jnigraphics)
#二2.3.2-0：查找系统库
find_library(
        #log-lib
        #log
        native-lib
        ${LIBS}  )


#二2.3.2-0：设置依赖库（第一个必须为目标模块，顺序不能换）
target_link_libraries(
        native-lib
        ${log-lib} )


#二2.3.2-0：添加编译参数
#add_definitions(-DFOO -DDEBUG)

#二2.3.2-0：添加子目录cpp源文件(参数：子目录路径，输出路径)
#add_subdirectory(sub_dir [binary_dir])

#二2.3.2-0：
#file(GLOB variable [RELATIVE path] [globbing expressions]...)

#二2.3.2-0：设置某个路径的一种属性
#set_directory_properties()

#二2.3.2-0：给指定作用域设置一个命名属性
#set_property()










